1 package uba.db.ar;
2
3 import java.util.*;
4
5 /***
6 * <p>Title: </p>
7 *
8 * <p>Description: </p>
9 * Representa a una tupla del AR. Contiene ademas la referencia a
10 * su TupleDef.
11 *
12 * <p>Copyright: Copyright (c) 2005</p>
13 *
14 * <p>Company: </p>
15 * @author not attributable
16 * @version 1.0
17 */
18 public class Tupla {
19 private TuplaDef def;
20 private Vector contents;
21
22 public Tupla(TuplaDef definicion) {
23 def = definicion;
24 contents = new Vector();
25 contents.setSize(definicion.getSize());
26 }
27
28 /***
29 * @todo Estos getters y settes trabajan con Object, pero tal vez deberian
30 * trabajar con un objeto que encapsule el valor string o integer --
31 * consultar
32 * @param indice int
33 * @return Object
34 */
35 public Object get(int indice) {
36 indice--;
37 return contents.elementAt(indice);
38 }
39
40 /***
41 * copyValuesFrom
42 * Recibe una tupla con datos y una lista de indices de esa tupla que mapean
43 * a los campos del receiver para copiar los valores
44 *
45 * @param origen Tupla
46 * @param list List
47 * @todo Falta hacer el chequeo de tipos entre las columnas que se reciben
48 */
49 public void set(int indice, Object valor) {
50 indice--;
51 /*** @todo no se chequea que el valor corresponda a algo que se puede poner en esta columna */
52 contents.setElementAt(valor, indice);
53 }
54
55 public String toString() {
56 Object valor;
57 String result, campo;
58 result = "Tupla: [";
59 Iterator i = contents.iterator();
60 while (i.hasNext()) {
61 valor = i.next();
62 if (valor == null) {
63 campo = "(NULL)";
64 } else {
65 campo = valor.toString();
66 }
67 result = result + " " + campo;
68 }
69 result = result + "]";
70
71 return result;
72 }
73
74 public void copyValuesFrom(Tupla origen, List indexes) {
75 Iterator i = indexes.iterator();
76 int c = 1;
77 while (i.hasNext()) {
78 set(c, origen.get( ((Integer) i.next()).intValue() ));
79 c++;
80 }
81 }
82
83 public TuplaDef tuplaDefinition() {
84 return def;
85 }
86 }